/**
 * [36] 有效的数独
 *
 * @format
 * @lc app=leetcode.cn id=36 lang=javascript
 */

// @lc code=start
/**
 * @param {character[][]} board
 * @return {boolean}
 */
var isValidSudoku = function (board) {
    let temp = Array(9).fill(0)
    const rows = temp.map(() => Array(9).fill(0))
    const cols = temp.map(() => Array(9).fill(0))
    const sudokus = [0, 0, 0].map(() => [0, 0, 0].map(() => Array(9).fill(0)))
    for (let i = 0; i < 9; i++) {
        for (let j = 0; j < 9; j++) {
            temp = board[i][j]
            if (temp === ".") continue
            rows[i][temp - 1]++
            cols[j][temp - 1]++
            sudokus[Math.floor(i / 3)][Math.floor(j / 3)][temp - 1]++
        }
    }
    // console.log(rows)
    // console.log(cols)
    // console.log(sudokus)
    for (let i = 0; i < 9; i++) {
        for (let j = 0; j < 9; j++) {
            if (rows[i][j] > 1) return false
            if (cols[i][j] > 1) return false
            let k = (i % 3) * 3 + (j % 3)
            if (sudokus[Math.floor(i / 3)][Math.floor(j / 3)][k] > 1) return false
        }
    }
    return true
}
// debugger
// const board = [
//     [".", ".", ".", ".", "5", ".", ".", "1", "."],
//     [".", "4", ".", "3", ".", ".", ".", ".", "."],
//     [".", ".", ".", ".", ".", "3", ".", ".", "1"],
//     ["8", ".", ".", ".", ".", ".", ".", "2", "."],
//     [".", ".", "2", ".", "7", ".", ".", ".", "."],
//     [".", "1", "5", ".", ".", ".", ".", ".", "."],
//     [".", ".", ".", ".", ".", "2", ".", ".", "."],
//     [".", "2", ".", "9", ".", ".", ".", ".", "."],
//     [".", ".", "4", ".", ".", ".", ".", ".", "."]
// ]
// const RES = isValidSudoku(board)
// console.log(RES)
// @lc code=end
